// We should use `stats` props of webpack. But it not work in v4.
class CleanUpStatsPlugin {
    constructor(option) {
        this.option = {
            MiniCSSExtractPlugin: true,
            tsLoader: true,
            ...option,
        };
    }

    shouldPickStatChild(child) {
        const { MiniCSSExtractPlugin } = this.option;
        if (
            MiniCSSExtractPlugin &&
            child.name.includes('mini-css-extract-plugin')
        )
            return false;
        return true;
    }

    shouldPickWarning(message) {
        const { tsLoader } = this.option;
        if (tsLoader && /export .* was not found in .*/.test(message)) {
            return false;
        }
        return true;
    }

    apply(compiler) {
        compiler.hooks.done.tap('CleanUpStatsPlugin', (stats) => {
            const { children, warnings } = stats.compilation;
            if (Array.isArray(children)) {
                stats.compilation.children = children.filter((child) =>
                    this.shouldPickStatChild(child),
                );
            }
            if (Array.isArray(warnings)) {
                stats.compilation.warnings = warnings.filter((message) =>
                    this.shouldPickWarning(message),
                );
            }
        });
    }
}

module.exports = CleanUpStatsPlugin;
